身份证号码的数学奥秘
身份证号码是我国公民在日常生活中最常用的、也是最重要的代码。
但是,你知道其中隐藏的数学奥秘吗?
本文解释身份证号码的最后一位(检验码)背后的数学原理,适合中小学生和一般读者阅读。
(一)公民身份号码的国家标准
根据国务院的决定,自1999年10月1日起在全国建立和实行公民身份号码制度。
公民身份号码是国家为每个公民从户籍申报之日起编定的唯一的、终身不变的身份代码。
公民身份号码按照GB11643-1999《公民身份号码》国家标准编制,由18位数字代码组成:前6位为行政区划代码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码。
与此前使用的15位身份证号码相比较,18位身份号码增加了出生年份的前两位数字,以及第18位码——校验码。
18位身份证号码的前17位代码的值都是 0~9 的阿拉伯数字;其中,第17位数字显示出身份号码拥有者的性别:奇数为男性,偶数为女性。
第18位码(校验码)的值或者是 0~9 的阿拉伯数字,或者是罗马数字 (值为 10)。它是由前17位码完全决定的,具有校验功能,用于检验输入或抄写代码过程是否发生错误。
(二)身份证号码举例
我们来看一个具体的身份证号码(非实例):
它代表十进制的数:
这里 读作“以 为底的 次幂”,代表 个 的乘积,也就是数字 后面添 个零得到的数;因此有
同理,有以其他数为底的幂。例如,以 为底的幂:
熟知,在计算机科学中,使用的是二进制。
(三)身份证校验码的数学原理
身份证校验码的取值为 到 的自然数(如果值为 ,就替换为等值的罗马数字 )
校验码是由身份证号码的前面17位数字根据校验规则唯一确定的。
我们把18位身份证号码所对应的十进制表达式 中出现的所有幂的底数 都换成 就得到二进制表达式
利用余数的运算法则,可以验证: 除以 的余数等于 记为
这里的符号 表示“除以 的余数相等”,也就是它左右两边的整数除以 的余数相同。
校验规则:身份证号码的校验规则为:
把身份证号码的十八位代码所对应的十进制表达式 中出现的所有以 为底的幂都改为以 为底的幂(保持次数及系数不变),得到表达式 并要求整数 除以 的余数等于 即
这样的要求唯一地决定了检验码的值。
记校验码的值为 (代表英文“check digit”
对于 记第 位码的值为 则有
规定第 位码的系数 等于 除以 所得余数,即
按从右向左的次序依次计算这些系数,得到:
第 18 位码的系数是
第 17 位码的系数是
第 16 位码的系数是
第 15 位码的系数是
第 14 位码的系数是
第 2 位码的系数是
第 1 位码的系数是
写成一行,第一到十八位的系数分别为:
利用上面的记号,确定校验码的公式就是
即 (因为 且 )
由此容易解出校验码 的值。
注:前面提到的系数 也称为权数。
(四)身份证校验码的计算举例
现在,对于第二节开头的那个身份证号码,根据前十七位数字来计算校验码的值。
下表的第一至四列分别记录位次 权数 位码 及乘积 的值。
位次 | 权数 | 位码值 | 乘积 |
---|---|---|---|
1 | 7 | 3 | 21 |
2 | 9 | 7 | 63 |
3 | 10 | 0 | 0 |
4 | 5 | 1 | 5 |
5 | 8 | 0 | 0 |
6 | 4 | 3 | 12 |
7 | 2 | 1 | 2 |
8 | 1 | 9 | 9 |
9 | 6 | 9 | 54 |
10 | 3 | 2 | 6 |
11 | 7 | 0 | 0 |
12 | 9 | 9 | 81 |
13 | 10 | 1 | 10 |
14 | 5 | 7 | 35 |
15 | 8 | 6 | 48 |
16 | 4 | 4 | 16 |
17 | 2 | 2 | 4 |
18 | 1 | C | C |
按规则,最后一列的和除以 余 即
由此立即得到
这个例子解释了身份证校验码的计算过程。
注:根据余数计算的原理,在计算整数的加法、减法、乘法的混合运算的结果除以 的余数的过程中,可以随时把涉及的整数替换为除以 的余数,再继续运算。这样做的好处是,在整个计算过程中将只遇到较小的数。
(五)身份证校验码的校验效果
身份证号码校验规则的制定能确保对于恰有一位错码的情况具有完全校验功能:如果录入得到的号码刚好出现一处错误,则产生的18位号码必定不满足校验要求,因此校验出存在错误。
实际上,即使出现多处错误,也能较大概率校验出存在错误。
问题:身份证号码出现一处错误能够确保被校验出存在错误的数学原理是什么?
解答这个问题,要从选择“除以 ”说起。
已知 是素数。因此如果两个整数都不是 的倍数,它们的乘积也不是 的倍数。
现在,假设把正确的身份证号码仅改变了第 位的值。设新的第 位码的值等于 其中
因为 和 都不是 的倍数,所以它们的乘积不是 的倍数,即
设改动后的号码所对应的二进制表达式为 则有
这说明,恰有一位错码的身份证号码必定不满足校验规则,从而被校验出存在错误。
注:根据同样的论证,也可以选择除以其他素数。但是,如果选择比 小的素数(比如 ),则多位错码的情形被校验出的概率会较大幅度地降低;如果选择比 大的素数(比如 ),需要增加更多的非阿拉伯数字的代码,会造成使用上的不方便。可见,除以 是一个很好的选择。
另外,如果选择除以合数(比如 ),可能发生恰有一位错码但不能被校验出存在错误的情形——显然 且 就是这样的情形。
(六)另一种校验码——13位国际标准书号
实际上,校验码可以说无处不在:常见的重要代码大部分有校验规则。
作为例子,我们简要介绍13位国际标准书号(ISBN-13)的校验规则。
如今,世界上每一本公开出版的图书都有唯一的13位国际标准书号(ISBN-13),其中最后一位数是校验码:它是从 到 的数码,可以从前面的12位数码按校验规则计算得出。
13位国际标准书号采用极为简单的权数(系数)规定:由不断重复的 构成。确切地,各个位置对应的权数是:
13位国际标准书号的校验规则为:各位置上的数字与对应权数的乘积之和除以 的余数等于 .
我们来看13位国际标准书号(ISBN-13)的一个实例。下图中的13位数字号码
是本文作者钟爱的一本书的书号。
练习:请从前面的书号的前12位推算出校验码(第13位)。
练习:试证明如果13位国际标准书号恰好有一个码位的数字出错,那么必定不满足校验规则。
(七)结束语
身份证校验码和13位国际标准书号的例子表明,数学就在我们身边,关键看我们是否善于发现,并破解其中隐藏的数学奥秘。
有兴趣的读者可以尝试发现身边更多的数学。
读过本文,再细看身份证,你是否有新的感觉?